/* 
	全局公用函数方法
	引入方式 App.vue
	import { COMMON_MIXINS } from '@/common/js/mixins.js';   //公用函数方法
	export default {
		mixins: [COMMON_MIXINS],    //公用函数方法
	}
*/

import Vue from "vue";
export const COMMON_MIXINS = {
	data() {
		return {
			timeoutTimes: 0,   //记录请求失败接口个数，只在第一个提示错误信息
			innerAudioContext: null,  // 音频对象
		}
	},
	mounted() {
		this.timeoutTimes = 0;
		// 请求方法封装
		Vue.prototype.$request = this.request;
		// 打开html页面
		Vue.prototype.$openURL = this.openURL;
		// 音频配置
		this.innerAudioContext = uni.createInnerAudioContext();
		Vue.prototype.$musicPlay = this.musicPlay;
		// 返回首页选择页
		Vue.prototype.$backPage = ()=>{
			uni.reLaunch({
			    url: "/pages/home/homeNav"
			});
		}
	},
	methods: {
		/**
		 * @param {Object} musicSrc
		 * @param {Object} type  音频操作类型,传音频地址表示新建
		 */
		musicPlay(type) {
			switch(type) {
				case "play":
					// 播放
					this.innerAudioContext.onPlay();
					break;
				case "stop":
					// 停止
					this.innerAudioContext.onStop();
					break;
				case "pause":
					// 暂停 
					this.innerAudioContext.onPause();
					break;
				default: 
					// 默认传音频地址
					this.innerAudioContext.onStop();  // 需要先停止前面的
					this.innerAudioContext.autoplay = true;
					this.innerAudioContext.src = type;
					this.innerAudioContext.onPlay();
			}
			
		},
		/**
		 * 请求方法uni.request封装
		 * @param {Object} params  请求接口的配置参数
		 */
		request(params) {
			let headers = params.headers || {};
			// 'Content-type':'application/x-www-form-urlencoded',  // 发送参数为form-data格式
			headers['Token'] = localStorage.getItem('token');    //权限请求头
			// 拼接url传的参数
			let paramsStr = "";
			if(params.params) {
				paramsStr = [];
				for (let key in params.params) {
					paramsStr.push(key + "=" + params.params[key]);
				}
				paramsStr = "?" + paramsStr.join("&");
			}
			return uni.request({
			    url: params.url + paramsStr,   // 拼接url后的传参
			    data: params.data || {},
			    header: headers,
			    method: params.method,
				timeout: params.timeout,
			    dataType: params.dataType,
				responseType: params.responseType,
				sslVerify: params.sslVerify,
				success: (res)=>{
					// console.log("success", res  );
					if(params.success) {
						params.success(res);
					}
					return;   // 不往下执行
					
					// 请求成功状态判断
					if(res.statusCode >= 200 && res.statusCode <= 300) {
						// console.log( "请求成功状态判断", res.data );
						if(params.success) {
							params.success(res);
						}
					}else {
						// console.log( "请求错误", res.data.error );
						this.timeoutTimes++;
						if (this.timeoutTimes > 1) {
							setTimeout(() => {
								this.timeoutTimes = 0;
							}, 500)
							if(params.fail) {
								params.fail(res);
							}
							return;
						}
						// 错误提示
						let htmlStr = res.data.error || res.data.message || "请求错误！";
						this.$UniModalTips.error({
								content: htmlStr,
								onChange: (val)=> {
									if(!val.show) {
										this.timeoutTimes = 0;
									}
								}
							});
						
						if(params.fail) {
							params.fail(res);
						}
					}
				},
				fail: (res)=>{
					// this.timeoutTimes++;
					// if (this.timeoutTimes > 1) {
					// 	setTimeout(() => {
					// 		this.timeoutTimes = 0;
					// 	}, 500)
					// 	if(params.fail) {
					// 		params.fail(res);
					// 	}
					// 	return;
					// }
					// this.$UniModalTips.error("请求错误");  // 请求错误提示框
					if(params.fail) {
						params.fail(res);
					}
				},
				complete: (res)=>{
					// console.log("complete", res  );
					if(params.complete) {
						params.complete(res);
					}
				}
			})
		},
		/**
		 * @param {Object} href 打开html页面
		 */
		openURL(href) {
			if(!href) {
				return;
			}
			// #ifdef APP-PLUS
			plus.runtime.openURL(href)
			// #endif
			// #ifdef H5
			window.open(href)
			// #endif
			// #ifdef MP
			uni.setClipboardData({
				data: href
			});
			uni.showModal({
				content: this.copyTips,
				showCancel: false
			});
			// #endif
		}
		
		
	}
}
